Ansible এ টেমপ্লেট হলো Jinja2 টেমপ্লেট ইঞ্জিন ব্যবহার করে তৈরি করা একটি ফাইল যা ডায়নামিক কনফিগারেশন তৈরি করতে ব্যবহৃত হয়। টেমপ্লেট ব্যবহার করলে আপনি সহজেই ভ্যারিয়েবল, লুপ, এবং শর্ত যুক্ত করে ফাইল কনফিগার করতে পারেন। এটি আপনার প্লেবুক বা রোলকে আরও ফ্লেক্সিবল এবং পুনরায় ব্যবহারযোগ্য করে তোলে, কারণ একবার টেমপ্লেট তৈরি করলে আপনি বিভিন্ন ভ্যারিয়েবলের মান ব্যবহার করে সেটিকে বিভিন্ন সার্ভারে প্রয়োগ করতে পারেন।
টেমপ্লেট সাধারণত Ansible রোলের templates
ডিরেক্টরিতে রাখা হয় এবং ফাইলের এক্সটেনশন সাধারণত .j2
(Jinja2 টেমপ্লেট) হয়। টেমপ্লেটে আপনি ভ্যারিয়েবল, লুপ, এবং কন্ডিশন ব্যবহার করতে পারেন, যা প্লেবুক বা রোলের ভ্যারিয়েবল থেকে মান গ্রহণ করে।
নিচে একটি nginx.conf.j2
টেমপ্লেটের উদাহরণ দেয়া হলো যা nginx
সার্ভারের জন্য কনফিগারেশন ফাইল তৈরি করতে ব্যবহৃত হতে পারে:
# templates/nginx.conf.j2
server {
listen {{ nginx_port }};
server_name {{ server_name }};
location / {
root {{ document_root }};
index index.html index.htm;
}
{% if enable_logging %}
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
{% endif %}
}
enable_logging
ভ্যারিয়েবল সত্য হয় (True), তাহলে লগিং কনফিগারেশন যোগ করা হবে।একবার টেমপ্লেট তৈরি হয়ে গেলে, আপনি এটি template
মডিউল ব্যবহার করে প্লেবুকে অন্তর্ভুক্ত করতে পারেন। নিচে একটি উদাহরণ দেয়া হলো:
---
- name: Configure Nginx using a template
hosts: webservers
become: yes
vars:
nginx_port: 80
server_name: example.com
document_root: /var/www/html
enable_logging: true
tasks:
- name: Deploy Nginx configuration
template:
src: templates/nginx.conf.j2
dest: /etc/nginx/nginx.conf
notify: Restart Nginx
src
: টেমপ্লেট ফাইলের পাথ যা রোল বা প্লেবুক ডিরেক্টরির মধ্যে থাকতে পারে।dest
: টেমপ্লেট প্রসেসিং করে যেই ফাইল তৈরি হবে, তার গন্তব্যস্থান।Restart Nginx
হ্যান্ডলার কল করা হয়েছে।Ansible টেমপ্লেটে Jinja2 এর মাধ্যমে আরও ডায়নামিক এবং কাস্টমাইজড কনফিগারেশন তৈরি করা যায়। যেমন:
# templates/hosts.j2
{% for host in groups['webservers'] %}
{{ host }} ansible_host={{ hostvars[host]['ansible_default_ipv4']['address'] }}
{% endfor %}
ব্যাখ্যা:
webservers
গ্রুপের প্রতিটি হোস্টের জন্য একটি লাইন তৈরি করবে এবং হোস্টের আইপি অ্যাড্রেস প্রদর্শন করবে।
# templates/info.j2
The server {{ ansible_hostname }} is running on {{ ansible_distribution | lower }}.
ব্যাখ্যা:
lower
ফিল্টার ব্যবহার করে ansible_distribution
ভ্যারিয়েবলের মান ছোট হাতের অক্ষরে (lowercase) প্রদর্শন করা হয়েছে।.j2
এক্সটেনশনে।template
মডিউল ব্যবহার করে টেমপ্লেট প্রয়োগ করুন।Ansible টেমপ্লেটের মাধ্যমে আপনি প্লেবুক বা রোলকে আরও ফ্লেক্সিবল, ডায়নামিক, এবং রিইউজেবল করতে পারবেন। এটি বিশেষ করে বড় স্কেল ডিপ্লয়মেন্ট বা কনফিগারেশন ব্যবস্থাপনার জন্য অত্যন্ত কার্যকর।
Jinja2 হলো একটি শক্তিশালী এবং ফ্লেক্সিবল টেমপ্লেট ইঞ্জিন, যা সাধারণত Python প্রোগ্রামিং ল্যাঙ্গুয়েজের সাথে ব্যবহৃত হয়। Ansible এ এটি ব্যবহার করা হয় টেমপ্লেট তৈরি এবং প্লেবুকের মধ্যে ডাইনামিক কনটেন্ট যোগ করতে। Jinja2 এর মাধ্যমে আপনি টেমপ্লেট তৈরি করে, তা রেন্ডার করে কাস্টম কনফিগারেশন ফাইল, স্ক্রিপ্ট, বা অন্যান্য টেক্সট ফাইল তৈরি করতে পারেন, যা বিভিন্ন ভ্যারিয়েবল এবং লজিক্যাল এক্সপ্রেশন সমর্থন করে।
Jinja2 টেমপ্লেট ইঞ্জিন মূলত একটি ডাটারেন্ডারিং ইঞ্জিন, যেখানে আপনি বিভিন্ন ভ্যারিয়েবল, কন্ডিশনাল স্টেটমেন্ট, লুপ এবং অন্যান্য লজিক ব্যবহার করে টেমপ্লেট তৈরি করতে পারেন। এটি সাধারণত .j2
এক্সটেনশনের ফাইল হিসেবে সংরক্ষণ করা হয়, যেমন config.j2
।
Ansible এ Jinja2 টেমপ্লেটের মাধ্যমে কনফিগারেশন ফাইল বা অন্যান্য টেক্সট ফাইল ডাইনামিকভাবে তৈরি করা যায়। প্লেবুকে Jinja2 টেমপ্লেট ব্যবহার করে হোস্টের বিভিন্ন ইনফরমেশন (facts) এবং ভ্যারিয়েবল দিয়ে টেমপ্লেট রেন্ডার করা যায়।
নিচে একটি সাধারণ Jinja2 টেমপ্লেটের উদাহরণ দেয়া হলো:
hosts.j2:
[webservers]
{% for host in webservers %}
{{ host }}
{% endfor %}
এই টেমপ্লেটটি [webservers]
সেকশনে সমস্ত হোস্টের নাম তালিকাভুক্ত করবে যা webservers
ভ্যারিয়েবলে থাকবে।
১. ভ্যারিয়েবল: Jinja2 টেমপ্লেটে সরাসরি ভ্যারিয়েবল ব্যবহার করা যায়। উদাহরণ:
Server IP: {{ server_ip }}
২. লুপ: Jinja2 টেমপ্লেটের মাধ্যমে লুপ ব্যবহার করে রিপিটিটিভ কনটেন্ট তৈরি করা যায়:
{% for user in users %}
Username: {{ user.name }}
Email: {{ user.email }}
{% endfor %}
৩. কন্ডিশনাল স্টেটমেন্ট: টেমপ্লেটে if
, else
, এবং elif
ব্যবহার করে কন্ডিশনাল লজিক ব্যবহার করা যায়:
{% if env == "production" %}
This is the production environment.
{% else %}
This is the development environment.
{% endif %}
Ansible এ Jinja2 টেমপ্লেট ব্যবহার করতে template
মডিউল ব্যবহার করা হয়, যা টেমপ্লেট ফাইল রেন্ডার করে নির্দিষ্ট লোকেশনে কপি করে।
apache_config.j2:
<VirtualHost *:{{ port }}>
ServerAdmin {{ admin_email }}
DocumentRoot {{ doc_root }}
ServerName {{ server_name }}
</VirtualHost>
playbook.yml:
---
- name: Deploy Apache configuration
hosts: webservers
become: yes
vars:
port: 80
admin_email: admin@example.com
doc_root: /var/www/html
server_name: example.com
tasks:
- name: Deploy Apache config using Jinja2 template
template:
src: templates/apache_config.j2
dest: /etc/apache2/sites-available/000-default.conf
এখানে, template
মডিউল apache_config.j2
ফাইলটি রেন্ডার করে /etc/apache2/sites-available/000-default.conf
লোকেশনে কপি করবে। রেন্ডার করার সময় প্লেবুকের ভ্যারিয়েবলগুলো টেমপ্লেট ফাইলে ইনজেক্ট করা হবে।
Jinja2 টেমপ্লেটের কিছু বিশেষ ফিচার এবং ফিল্টার রয়েছে, যা টেমপ্লেট রেন্ডারিংকে আরও শক্তিশালী করে:
১. ফিল্টার: ভ্যারিয়েবল বা এক্সপ্রেশনের উপর বিভিন্ন ফিল্টার প্রয়োগ করা যায়। উদাহরণ:
lower
: টেক্সট ছোট হরফে রূপান্তর করা:{{ username | lower }}
default
: কোনো মান না থাকলে ডিফল্ট মান সেট করা:{{ server_name | default("localhost") }}
২. জটিল ডাটা স্ট্রাকচার এবং লুপ:
Users:
{% for user in users %}
- Name: {{ user.name }}
Email: {{ user.email }}
{% endfor %}
template
মডিউলের মাধ্যমে Jinja2 টেমপ্লেট ব্যবহার করা হয়।Jinja2 টেমপ্লেট ব্যবহার করে Ansible প্লেবুককে আরও ডাইনামিক এবং কাস্টমাইজড করা যায়, যা বড় এবং জটিল ইনফ্রাস্ট্রাকচারে কার্যকর।
Ansible-এ template
মডিউল ব্যবহার করা হয় Jinja2 টেম্পলেট ফাইল থেকে কনফিগারেশন ফাইল বা অন্যান্য ফাইল তৈরি করার জন্য। এই মডিউলটি ডায়নামিক কনফিগারেশন ফাইল তৈরি করতে সহায়ক, যেখানে ভ্যারিয়েবল বা কন্ডিশনাল লজিক ব্যবহার করে ফাইল কাস্টমাইজ করা যায়।
template
মডিউল কীভাবে কাজ করে?template
মডিউল Jinja2 টেম্পলেট ফাইলটি সোর্স হিসেবে ব্যবহার করে এবং টার্গেট সিস্টেমে (রিমোট হোস্ট) এটি কপি করে। টেম্পলেট ফাইলে Jinja2 সিনট্যাক্স ব্যবহার করে ভ্যারিয়েবল এবং লজিক যুক্ত করা যায়, যা Ansible প্লেবুক বা ইনভেন্টরি থেকে ডেটা নিয়ে ডায়নামিক কনফিগারেশন তৈরি করে।
template
মডিউল এর সিনট্যাক্স
- name: টেম্পলেট ব্যবহার করে ফাইল কপি করা
template:
src: /path/to/template_file.j2
dest: /path/to/destination_file
owner: user
group: group
mode: '0644'
template
মডিউল এর উপাদানগুলোsrc
: টেম্পলেট ফাইলের সোর্স পাথ (লোকাল সিস্টেমে)। এই ফাইলটি Jinja2 সিনট্যাক্স ব্যবহার করে তৈরি করা হয়।dest
: টার্গেট পাথ যেখানে টেম্পলেট ফাইলটি রিমোট সিস্টেমে কপি করা হবে।owner
, group
, এবং mode
: টার্গেট ফাইলের মালিকানা, গ্রুপ, এবং পারমিশন সেট করতে ব্যবহৃত হয় (ঐচ্ছিক)।ধরা যাক, আপনার একটি Nginx কনফিগারেশন ফাইল আছে যা ডায়নামিক ভ্যারিয়েবল ব্যবহার করে তৈরি করা হবে।
nginx.conf.j2
):
server {
listen {{ http_port }};
server_name {{ domain_name }};
location / {
proxy_pass http://{{ backend_server }};
}
}
---
- name: Deploy Nginx configuration
hosts: webservers
become: yes
vars:
http_port: 80
domain_name: example.com
backend_server: 192.168.1.10
tasks:
- name: Copy Nginx configuration using template
template:
src: templates/nginx.conf.j2
dest: /etc/nginx/conf.d/nginx.conf
owner: root
group: root
mode: '0644'
বিশ্লেষণ:
http_port
, domain_name
, এবং backend_server
ভ্যারিয়েবলগুলো প্লেবুকের vars
সেকশনে উল্লেখ করা হয়েছে, যা টেম্পলেট ফাইল (nginx.conf.j2
) এ ব্যবহার করা হয়েছে।template
মডিউল টেম্পলেট ফাইলটি /etc/nginx/conf.d/nginx.conf
এ কপি করবে এবং ফাইলের মালিকানা, গ্রুপ, ও পারমিশন সেট করবে।template
মডিউল এবং Jinja2template
মডিউল Jinja2 সিনট্যাক্স ব্যবহার করে, যা নিচের ফিচারগুলো সমর্থন করে:
{{ variable_name }}
ব্যবহার করে ভ্যারিয়েবল উল্লেখ করা যায়।{% for item in list %}
ব্যবহার করে লুপ করা যায়।{% if condition %}
ব্যবহার করে শর্ত অনুযায়ী কনফিগারেশন তৈরি করা যায়।
server {
listen 80;
server_name {{ domain_name }};
{% if ssl_enabled %}
listen 443 ssl;
ssl_certificate /etc/nginx/ssl/{{ domain_name }}.crt;
ssl_certificate_key /etc/nginx/ssl/{{ domain_name }}.key;
{% endif %}
}
উপরের টেম্পলেট ফাইলে, যদি ssl_enabled
ভ্যারিয়েবলটি true
হয়, তাহলে SSL কনফিগারেশন অংশটি যুক্ত হবে। অন্যথায়, এই অংশটি এড়িয়ে যাবে।
template
মডিউল ব্যবহার করে Jinja2 টেম্পলেটের মাধ্যমে ডায়নামিক কনফিগারেশন ফাইল তৈরি করা যায়।template
মডিউল একটি অত্যন্ত শক্তিশালী টুল, যা প্লেবুকের পুনঃব্যবহারযোগ্যতা ও কার্যকারিতা বাড়ায়।template
মডিউল ব্যবহার করে আপনি সহজেই ডায়নামিক কনফিগারেশন এবং ফাইল ম্যানেজমেন্ট করতে পারবেন, যা আপনার প্লেবুক এবং রোলগুলিকে আরও শক্তিশালী করবে।
Ansible-এ কনফিগারেশন ফাইল তৈরি এবং ডিপ্লয় করা একটি সাধারণ কাজ, বিশেষ করে যখন সার্ভার, অ্যাপ্লিকেশন বা অন্যান্য সার্ভিসগুলোর সেটআপ অটোমেট করতে হয়। এটি করার জন্য Ansible-এ সাধারণত template
মডিউল ব্যবহার করা হয়, যেখানে Jinja2 টেম্পলেটের মাধ্যমে কনফিগারেশন ফাইল তৈরি এবং রিমোট হোস্টে ডিপ্লয় করা হয়। এখানে কনফিগারেশন ফাইল তৈরি এবং ডিপ্লয় করার একটি উদাহরণ দেখানো হলো।
প্রথমে, আপনার টেম্পলেট ফাইল তৈরি করতে হবে। টেম্পলেট ফাইল সাধারণত templates/
ডিরেক্টরিতে সংরক্ষণ করা হয় এবং এটি Jinja2 সিনট্যাক্স ব্যবহার করে।
templates/nginx.conf.j2
server {
listen {{ http_port }};
server_name {{ domain_name }};
location / {
proxy_pass http://{{ backend_server }};
}
}
বিশ্লেষণ:
{{ http_port }}
, {{ domain_name }}
, এবং {{ backend_server }}
ভ্যারিয়েবলগুলোর মাধ্যমে ডায়নামিক মান ব্যবহার করা হয়েছে।এরপর, আপনি একটি প্লেবুক তৈরি করবেন যেখানে template
মডিউল ব্যবহার করে টেম্পলেট ফাইলটি রিমোট হোস্টে ডিপ্লয় করবেন।
deploy_nginx.yml
---
- name: Deploy Nginx configuration file
hosts: webservers
become: yes
vars:
http_port: 80
domain_name: example.com
backend_server: 192.168.1.10
tasks:
- name: Copy Nginx configuration using template
template:
src: templates/nginx.conf.j2
dest: /etc/nginx/conf.d/nginx.conf
owner: root
group: root
mode: '0644'
- name: Restart Nginx service
service:
name: nginx
state: restarted
বিশ্লেষণ:
http_port
, domain_name
, এবং backend_server
ভ্যারিয়েবলগুলো প্লেবুকের vars
সেকশনে উল্লেখ করা হয়েছে।template
মডিউল:src
: টেম্পলেট ফাইলের পাথ (লোকাল সিস্টেমে)।dest
: রিমোট সিস্টেমে টেম্পলেট ফাইলটি কপি করার স্থান।owner
, group
, এবং mode
: টার্গেট ফাইলের মালিকানা এবং পারমিশন সেট করা হয়েছে।service
মডিউল ব্যবহার করা হয়েছে।এখন, প্লেবুক রান করে কনফিগারেশন ফাইল তৈরি এবং ডিপ্লয় করতে হবে।
ansible-playbook -i inventory deploy_nginx.yml
-i inventory
: এখানে আপনার ইনভেন্টরি ফাইলের পাথ দিতে হবে যা টার্গেট হোস্ট বা হোস্ট গ্রুপ নির্ধারণ করে।template
মডিউল ব্যবহার করে টেম্পলেট ফাইলটি রিমোট হোস্টে কপি করা এবং সেট করা।এই পদ্ধতি অনুসরণ করে, আপনি সহজেই কনফিগারেশন ফাইল তৈরি ও ডিপ্লয় করতে পারবেন। Ansible-এর টেম্পলেট মডিউল এবং প্লেবুক ব্যবহারে কনফিগারেশন ম্যানেজমেন্ট সহজ এবং কার্যকর হয়ে ওঠে।